{"cells":[{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["# Forecasting service scale-out using Azure Storage and VSCode Jupyter Notebooks #\n","\n","As you may or may not know, VSCode has been busy enabling Jupyter Notebook functionality within the editor, which to those of us with our fingers in data analytics, is quite a nice boon to simplify our dev workflows and environments.\n","\n","Towards that effort, we hope to take this opportunity to walk through some interesting end-to-end examples of leveraging this tooling alongside our Azure capabilities (Blob storage, in this case).\n","\n","For this writeup, we'll demonstrate how to leverage App-Insights data (or really, any ad-hoc system-scale-related-telemetry) flowing into Azure Blob, to be consumed via experimentation in VSCode Jupyter for the purpose of designing a predictive model to anticipate service scale up/down, a common task for optimizing cloud spend and anticipating scale requirements.\n","\n","<p align=\"center\">\n","    <img src=\"https://camo.githubusercontent.com/1acea3f1c347974d095b303ee4e4d8b33cc4901e/687474703a2f2f616c6b616c696e652d6d6c2e636f6d2f696d672f7374617469632f706d646172696d615f726561646d655f6578616d706c65312e706e67\">\n","</p>"]},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["## Getting Started ##\n","For this exercise we'll need a few things.\n","\n","1. VSCode\n","  - VSCode installed via [this link](https://code.visualstudio.com/).\n","  - VSCode Python Extension installed, as demonstrated in [this tutorial](https://code.visualstudio.com/docs/python/python-tutorial).  You can alternately select to install this when prompted upon opening your first \"ipynb\" (jupyter notebook) file.\n","  - Python \"jupyter\" and \"notebook\" modules installed.  If the above steps have been completed, you will be prompted to install this upon attempting to run the notebook you've opened.\n","2. Azure Account\n","  - An Azure Account is needed to interact with the Azure Storage components of this demo, and can be created on [the Azure portal](https://portal.azure.com)."]},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":"## Environment Setup ##\n\nIn the interests of being self-referential, the first thing to do is download [this demo as an .ipynb](https://kibrantnstoragetest.blob.core.windows.net/public/ForecastingInVSCodeWithBlob.ipynb) and open it in VSCode.  You'll be able to follow along and run the code as you go, and see firsthand how notebooks can be used to intermesh code and documentation seamlessly with your dev environment.  Use the controls at the top of the editor, or on the cell itself, to progress through cells and run the code.\n\n<p align=\"center\">\n    <img src=\"https://code.visualstudio.com/assets/docs/python/jupyter/native-code-cells-03.png\">\n</p>\n\nNext, we'll consume some python libraries to interact with Azure and perform our analytics.  Running the following cell will install those libraries, while demonstrating how to install packages within a notebook via \"!\" notation.  \n**Note:** The odd quotation and sys executable syntax you see is to ensure it works regardless of if your system python is set distinctly from your kernel, or if the path to the kernel includes a space."},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":"import sys #To ensure we're using the right version of python, since ! tries to use system, and % doesn't natively handle windows paths with spaces well.\n\n# Azure storage SDK and identity package to authenticate.\n!\"{sys.executable}\" -m pip install azure-storage-blob azure-identity\n# Our data manipulation bread and butter.\n!\"{sys.executable}\" -m pip install pandas numpy sklearn\n# Basic visualization\n!\"{sys.executable}\" -m pip install matplotlib\n# Tooling to perform ARIMA forecasts. This may take a moment.\n!\"{sys.executable}\" -m pip install pmdarima\n# Just in case, ensure we have the python modules we need to run the rest of this notebook.\n!\"{sys.executable}\" -m pip jupyter notebook\n\n#If you hit permission issues when running this command, your kernel may be set to system python.  Install manually or change your kernel."},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["Finally, you'll need to provide permissions via Azure to perform the cloud operations detailed below, as well as the names of data input and output locations to be used throughout this piece.  This can be skipped if desired, as we do provide sample data for the numerical portion of this, but nonetheless hope the remainder can provide an example of how one typically interacts with these Azure resources.  We also hope this demonstrates an interesting flow of data to easily gain insights on your system behavior. \n","\n","While authentication can be commonly done via connection string, we'll use the InteractiveBrowserCredential flow here that doesn't require fetching as much information from the Azure portal.  This is just one way to authenticate.  One could also use DefaultAzureCredential via service principle credentials placed in Environment variables, for instance. [See this example for more details.](https://github.com/Azure/azure-sdk-for-python/blob/fd77736ec87af50a108f461f1e78ad11314942ee/sdk/storage/azure-storage-blob/samples/blob_samples_authentication.py#L124)"]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":"from azure.identity import InteractiveBrowserCredential\n\ncredential = InteractiveBrowserCredential()\n\n# The subscription ID you'll be utilizing\nsubscription_id = ''\n# The storage account to extract app insights logs from, and/or to write model metadata to.\ninput_storage_account_name = ''\n# The resource group to create a storage account from, if a distinct location is desired for model metadata being output.\noutput_resource_group = ''\n# If present, the distinct storage account to create for output data; otherwise the input_storage_account will be used.\noutput_storage_account_name = ''\n# The container to create and store output data in.\noutput_container_name = ''\n# The credentials needed for a service principle with authentication to the subscription for creating the output resources.\ntenant_id = ''\nclient_id = ''\nclient_secret = ''\n\nfrom azure.identity import ClientSecretCredential\ncredential = ClientSecretCredential(tenant_id, client_id, client_secret)\n\n# These settings are only relevant if you are following along with your own app-insights blob-exported data.os\n# The name of the container app-insights is sending data into.\napp_insights_container_name=''\n# The path your app-insights export is storing blobs under.\napp_blob_path = ''"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["## Obtaining the Data ##\n","\n","We can now access the storage account in Azure where our data is located.  This example assumes an App service setup wherein AppInsights uses [continuous export](https://learn.microsoft.com/azure/azure-monitor/app/export-telemetry) to populate log data into Azure Blob Storage, but the numerical approach that follows could reasonably be applied to any similarly shaped data.\n","\n","Below, we use the Azure Blob Storage SDK to connect to the storage account, enumerate blobs, and download their contents.  A Blob is effectively an unstructured block of bytes (often textual, but doesn't have to be) stored at a given path within a container of a Storage Account.  In this case it will contain the JSON-formatted logs output by our app service via App Insights.\n","\n","If you aren't modeling against app insights data, feel free to skip to the [Preparing Data](#PreparingtheData) subsection and resume execution there.  The key to this exercise is simply having data that gives you insight into the usage rates of your system over time; we use a count of total requests below.\n","\n","First things first, we have to connect to our storage account using the credentials we created above."]},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[],"source":"from azure.storage.blob import BlobServiceClient\n\ndef create_service_client(storage_account_name, credential):\n    oauth_url = \"https://{}.blob.core.windows.net\".format(\n        storage_account_name\n    )\n    return BlobServiceClient(account_url = oauth_url, credential=credential)\n\nservice_client = create_service_client(input_storage_account_name, credential)"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["We can now use this client to enumerate and fetch the logs stored in blobs within a container on the specified storage account.  This example assumes use of the App Insights continual data export functionality, a convenient way to egress raw app-service request data into a persisted environment, although it requires a small amount of work below to extract the relevent bits (times and counts of requests) from the raw logs and structure them conveniently.\n","\n","If you receive an authentication error in this section, check that the user or service principle backing the credential being used has \"Blob Data Owner\" permissions to the storage account in question; Owner itself is not sufficient."]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[],"source":"import json\nimport pandas\nfrom datetime import datetime, timedelta\n\ndef extract_requests_from_app_insights_container(service_client, app_blob_path, container_name, start_time=None, end_time=None):\n    '''AppInsights stores data in a series of folders (Metrics, Requests, etc) within a container.  This function \n    enumerates the blobs within the Requests folder, extracting the JSON-formatted request logs from within it and \n    storing their counts and timestamps to a dataframe for easy consumption.'''\n\n    data = pandas.DataFrame(columns=['count'])    \n    container = service_client.get_container_client(container_name)\n    # For even more efficient filtering, we could include components of the date in the matching prefix, such as Requests/2020-04-\n    blob_list = container.list_blobs(app_blob_path + '/Requests/')\n    for blob in blob_list:\n        body = container.download_blob(blob.name).readall().decode('utf8')\n        for request_string in body.split('\\n'):\n            try:\n                request = json.loads(request_string)\n                # Convert from string to date.  Massage the format slightly to match.\n                event_time = datetime.strptime(request['context']['data']['eventTime'][:-2], r'%Y-%m-%dT%H:%M:%S.%f')\n                if event_time < start_time or event_time > end_time:\n                    continue\n                count = sum(r['count'] for r in request['request'])\n                data.loc[event_time] = count\n            except:\n                continue\n    return data\n\ndata = extract_requests_from_app_insights_container(service_client, app_blob_path, app_insights_container_name, datetime.utcnow() - timedelta(hours=3), datetime.utcnow())"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["## Preparing the Data ##\n","\n","If Azure is not being used, please feel free to download our sample data from the following link as demonstrated.  As an added bonus, let it be noted that a public Azure blob (be careful when using this!) is accessable to the world via HTTP, we have utilized this to host the sample data, which can be readily downloaded and extracted for users following along without their own App Insights setup."]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":"import pandas\ndata = pandas.read_csv(r\"https://kibrantnstoragetest.blob.core.windows.net/public/synthetic_data.csv\", parse_dates=[0], index_col=[0])"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["Now that we have the raw data, let's aggregate it into a useful granularity to do forecasting.  The initial data is per-event, whereas it would be far more useful for our needs to have it bucketed by a timespan that allows us to see the underlying pattern we're hoping to model.  For our synthetic data, we'll do 2 minute buckets; this may naturally differ with other datasets but the goals are the same, to produce a continuous and non-sparse representation of the desired load trend, smoothing over short-term variance without losing too much signal."]},{"cell_type":"code","execution_count":4,"metadata":{},"outputs":[{"data":{"text/plain":"<matplotlib.axes._subplots.AxesSubplot at 0x1b07e567e48>"},"execution_count":4,"metadata":{},"output_type":"execute_result"},{"data":{"image/png":"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\n","image/svg+xml":"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\n<svg height=\"248.518125pt\" version=\"1.1\" viewBox=\"0 0 375.2875 248.518125\" width=\"375.2875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <defs>\r\n  <style type=\"text/css\">\r\n*{stroke-linecap:butt;stroke-linejoin:round;}\r\n  </style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n  <g id=\"patch_1\">\r\n   <path d=\"M 0 248.518125 \r\nL 375.2875 248.518125 \r\nL 375.2875 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n  </g>\r\n  <g id=\"axes_1\">\r\n   <g id=\"patch_2\">\r\n    <path d=\"M 33.2875 224.64 \r\nL 368.0875 224.64 \r\nL 368.0875 7.2 \r\nL 33.2875 7.2 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n   </g>\r\n   <g id=\"matplotlib.axis_1\">\r\n    <g id=\"xtick_1\">\r\n     <g id=\"line2d_1\">\r\n      <defs>\r\n       <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"m4be044540d\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n      </defs>\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m4be044540d\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_1\">\r\n      <!-- 12:00 -->\r\n      <defs>\r\n       <path d=\"M 12.40625 8.296875 \r\nL 28.515625 8.296875 \r\nL 28.515625 63.921875 \r\nL 10.984375 60.40625 \r\nL 10.984375 69.390625 \r\nL 28.421875 72.90625 \r\nL 38.28125 72.90625 \r\nL 38.28125 8.296875 \r\nL 54.390625 8.296875 \r\nL 54.390625 0 \r\nL 12.40625 0 \r\nz\r\n\" id=\"DejaVuSans-49\"/>\r\n       <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.21875 28.421875 74.21875 \r\nQ 39.75 74.21875 46.484375 68.546875 \r\nQ 53.21875 62.890625 53.21875 53.421875 \r\nQ 53.21875 48.921875 51.53125 44.890625 \r\nQ 49.859375 40.875 45.40625 35.40625 \r\nQ 44.1875 33.984375 37.640625 27.21875 \r\nQ 31.109375 20.453125 19.1875 8.296875 \r\nz\r\n\" id=\"DejaVuSans-50\"/>\r\n       <path d=\"M 11.71875 12.40625 \r\nL 22.015625 12.40625 \r\nL 22.015625 0 \r\nL 11.71875 0 \r\nz\r\nM 11.71875 51.703125 \r\nL 22.015625 51.703125 \r\nL 22.015625 39.3125 \r\nL 11.71875 39.3125 \r\nz\r\n\" id=\"DejaVuSans-58\"/>\r\n       <path d=\"M 31.78125 66.40625 \r\nQ 24.171875 66.40625 20.328125 58.90625 \r\nQ 16.5 51.421875 16.5 36.375 \r\nQ 16.5 21.390625 20.328125 13.890625 \r\nQ 24.171875 6.390625 31.78125 6.390625 \r\nQ 39.453125 6.390625 43.28125 13.890625 \r\nQ 47.125 21.390625 47.125 36.375 \r\nQ 47.125 51.421875 43.28125 58.90625 \r\nQ 39.453125 66.40625 31.78125 66.40625 \r\nz\r\nM 31.78125 74.21875 \r\nQ 44.046875 74.21875 50.515625 64.515625 \r\nQ 56.984375 54.828125 56.984375 36.375 \r\nQ 56.984375 17.96875 50.515625 8.265625 \r\nQ 44.046875 -1.421875 31.78125 -1.421875 \r\nQ 19.53125 -1.421875 13.0625 8.265625 \r\nQ 6.59375 17.96875 6.59375 36.375 \r\nQ 6.59375 54.828125 13.0625 64.515625 \r\nQ 19.53125 74.21875 31.78125 74.21875 \r\nz\r\n\" id=\"DejaVuSans-48\"/>\r\n      </defs>\r\n      <g transform=\"translate(18.878125 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-58\"/>\r\n       <use x=\"160.9375\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"224.560547\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_2\">\r\n     <g id=\"line2d_2\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"117.690861\" xlink:href=\"#m4be044540d\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_2\">\r\n      <!-- 13:00 -->\r\n      <defs>\r\n       <path d=\"M 40.578125 39.3125 \r\nQ 47.65625 37.796875 51.625 33 \r\nQ 55.609375 28.21875 55.609375 21.1875 \r\nQ 55.609375 10.40625 48.1875 4.484375 \r\nQ 40.765625 -1.421875 27.09375 -1.421875 \r\nQ 22.515625 -1.421875 17.65625 -0.515625 \r\nQ 12.796875 0.390625 7.625 2.203125 \r\nL 7.625 11.71875 \r\nQ 11.71875 9.328125 16.59375 8.109375 \r\nQ 21.484375 6.890625 26.8125 6.890625 \r\nQ 36.078125 6.890625 40.9375 10.546875 \r\nQ 45.796875 14.203125 45.796875 21.1875 \r\nQ 45.796875 27.640625 41.28125 31.265625 \r\nQ 36.765625 34.90625 28.71875 34.90625 \r\nL 20.21875 34.90625 \r\nL 20.21875 43.015625 \r\nL 29.109375 43.015625 \r\nQ 36.375 43.015625 40.234375 45.921875 \r\nQ 44.09375 48.828125 44.09375 54.296875 \r\nQ 44.09375 59.90625 40.109375 62.90625 \r\nQ 36.140625 65.921875 28.71875 65.921875 \r\nQ 24.65625 65.921875 20.015625 65.03125 \r\nQ 15.375 64.15625 9.8125 62.3125 \r\nL 9.8125 71.09375 \r\nQ 15.4375 72.65625 20.34375 73.4375 \r\nQ 25.25 74.21875 29.59375 74.21875 \r\nQ 40.828125 74.21875 47.359375 69.109375 \r\nQ 53.90625 64.015625 53.90625 55.328125 \r\nQ 53.90625 49.265625 50.4375 45.09375 \r\nQ 46.96875 40.921875 40.578125 39.3125 \r\nz\r\n\" id=\"DejaVuSans-51\"/>\r\n      </defs>\r\n      <g transform=\"translate(103.281486 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-51\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-58\"/>\r\n       <use x=\"160.9375\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"224.560547\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_3\">\r\n     <g id=\"line2d_3\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"202.094223\" xlink:href=\"#m4be044540d\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_3\">\r\n      <!-- 14:00 -->\r\n      <defs>\r\n       <path d=\"M 37.796875 64.3125 \r\nL 12.890625 25.390625 \r\nL 37.796875 25.390625 \r\nz\r\nM 35.203125 72.90625 \r\nL 47.609375 72.90625 \r\nL 47.609375 25.390625 \r\nL 58.015625 25.390625 \r\nL 58.015625 17.1875 \r\nL 47.609375 17.1875 \r\nL 47.609375 0 \r\nL 37.796875 0 \r\nL 37.796875 17.1875 \r\nL 4.890625 17.1875 \r\nL 4.890625 26.703125 \r\nz\r\n\" id=\"DejaVuSans-52\"/>\r\n      </defs>\r\n      <g transform=\"translate(187.684848 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-58\"/>\r\n       <use x=\"160.9375\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"224.560547\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_4\">\r\n     <g id=\"line2d_4\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"286.497584\" xlink:href=\"#m4be044540d\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_4\">\r\n      <!-- 15:00 -->\r\n      <defs>\r\n       <path d=\"M 10.796875 72.90625 \r\nL 49.515625 72.90625 \r\nL 49.515625 64.59375 \r\nL 19.828125 64.59375 \r\nL 19.828125 46.734375 \r\nQ 21.96875 47.46875 24.109375 47.828125 \r\nQ 26.265625 48.1875 28.421875 48.1875 \r\nQ 40.625 48.1875 47.75 41.5 \r\nQ 54.890625 34.8125 54.890625 23.390625 \r\nQ 54.890625 11.625 47.5625 5.09375 \r\nQ 40.234375 -1.421875 26.90625 -1.421875 \r\nQ 22.3125 -1.421875 17.546875 -0.640625 \r\nQ 12.796875 0.140625 7.71875 1.703125 \r\nL 7.71875 11.625 \r\nQ 12.109375 9.234375 16.796875 8.0625 \r\nQ 21.484375 6.890625 26.703125 6.890625 \r\nQ 35.15625 6.890625 40.078125 11.328125 \r\nQ 45.015625 15.765625 45.015625 23.390625 \r\nQ 45.015625 31 40.078125 35.4375 \r\nQ 35.15625 39.890625 26.703125 39.890625 \r\nQ 22.75 39.890625 18.8125 39.015625 \r\nQ 14.890625 38.140625 10.796875 36.28125 \r\nz\r\n\" id=\"DejaVuSans-53\"/>\r\n      </defs>\r\n      <g transform=\"translate(272.088209 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-58\"/>\r\n       <use x=\"160.9375\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"224.560547\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_5\">\r\n     <g id=\"line2d_5\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"368.0875\" xlink:href=\"#m4be044540d\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_6\">\r\n     <g id=\"line2d_6\">\r\n      <defs>\r\n       <path d=\"M 0 0 \r\nL 0 2 \r\n\" id=\"m7f19c55419\" style=\"stroke:#000000;stroke-width:0.6;\"/>\r\n      </defs>\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.6;\" x=\"75.489181\" xlink:href=\"#m7f19c55419\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_5\">\r\n      <!-- 12:30 -->\r\n      <g transform=\"translate(61.079806 237.638437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-58\"/>\r\n       <use x=\"160.9375\" xlink:href=\"#DejaVuSans-51\"/>\r\n       <use x=\"224.560547\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_7\">\r\n     <g id=\"line2d_7\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.6;\" x=\"159.892542\" xlink:href=\"#m7f19c55419\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_6\">\r\n      <!-- 13:30 -->\r\n      <g transform=\"translate(145.483167 237.638437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-51\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-58\"/>\r\n       <use x=\"160.9375\" xlink:href=\"#DejaVuSans-51\"/>\r\n       <use x=\"224.560547\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_8\">\r\n     <g id=\"line2d_8\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.6;\" x=\"244.295903\" xlink:href=\"#m7f19c55419\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_7\">\r\n      <!-- 14:30 -->\r\n      <g transform=\"translate(229.886528 237.638437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-58\"/>\r\n       <use x=\"160.9375\" xlink:href=\"#DejaVuSans-51\"/>\r\n       <use x=\"224.560547\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_9\">\r\n     <g id=\"line2d_9\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.6;\" x=\"328.699265\" xlink:href=\"#m7f19c55419\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_8\">\r\n      <!-- 15:30 -->\r\n      <g transform=\"translate(314.28989 237.638437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-58\"/>\r\n       <use x=\"160.9375\" xlink:href=\"#DejaVuSans-51\"/>\r\n       <use x=\"224.560547\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n   </g>\r\n   <g id=\"matplotlib.axis_2\">\r\n    <g id=\"ytick_1\">\r\n     <g id=\"line2d_10\">\r\n      <defs>\r\n       <path d=\"M 0 0 \r\nL -3.5 0 \r\n\" id=\"m5928dede77\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n      </defs>\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m5928dede77\" y=\"205.77124\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_9\">\r\n      <!-- 20 -->\r\n      <g transform=\"translate(13.5625 209.570458)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_2\">\r\n     <g id=\"line2d_11\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m5928dede77\" y=\"175.820826\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_10\">\r\n      <!-- 40 -->\r\n      <g transform=\"translate(13.5625 179.620045)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_3\">\r\n     <g id=\"line2d_12\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m5928dede77\" y=\"145.870413\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_11\">\r\n      <!-- 60 -->\r\n      <defs>\r\n       <path d=\"M 33.015625 40.375 \r\nQ 26.375 40.375 22.484375 35.828125 \r\nQ 18.609375 31.296875 18.609375 23.390625 \r\nQ 18.609375 15.53125 22.484375 10.953125 \r\nQ 26.375 6.390625 33.015625 6.390625 \r\nQ 39.65625 6.390625 43.53125 10.953125 \r\nQ 47.40625 15.53125 47.40625 23.390625 \r\nQ 47.40625 31.296875 43.53125 35.828125 \r\nQ 39.65625 40.375 33.015625 40.375 \r\nz\r\nM 52.59375 71.296875 \r\nL 52.59375 62.3125 \r\nQ 48.875 64.0625 45.09375 64.984375 \r\nQ 41.3125 65.921875 37.59375 65.921875 \r\nQ 27.828125 65.921875 22.671875 59.328125 \r\nQ 17.53125 52.734375 16.796875 39.40625 \r\nQ 19.671875 43.65625 24.015625 45.921875 \r\nQ 28.375 48.1875 33.59375 48.1875 \r\nQ 44.578125 48.1875 50.953125 41.515625 \r\nQ 57.328125 34.859375 57.328125 23.390625 \r\nQ 57.328125 12.15625 50.6875 5.359375 \r\nQ 44.046875 -1.421875 33.015625 -1.421875 \r\nQ 20.359375 -1.421875 13.671875 8.265625 \r\nQ 6.984375 17.96875 6.984375 36.375 \r\nQ 6.984375 53.65625 15.1875 63.9375 \r\nQ 23.390625 74.21875 37.203125 74.21875 \r\nQ 40.921875 74.21875 44.703125 73.484375 \r\nQ 48.484375 72.75 52.59375 71.296875 \r\nz\r\n\" id=\"DejaVuSans-54\"/>\r\n      </defs>\r\n      <g transform=\"translate(13.5625 149.669632)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-54\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_4\">\r\n     <g id=\"line2d_13\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m5928dede77\" y=\"115.92\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_12\">\r\n      <!-- 80 -->\r\n      <defs>\r\n       <path d=\"M 31.78125 34.625 \r\nQ 24.75 34.625 20.71875 30.859375 \r\nQ 16.703125 27.09375 16.703125 20.515625 \r\nQ 16.703125 13.921875 20.71875 10.15625 \r\nQ 24.75 6.390625 31.78125 6.390625 \r\nQ 38.8125 6.390625 42.859375 10.171875 \r\nQ 46.921875 13.96875 46.921875 20.515625 \r\nQ 46.921875 27.09375 42.890625 30.859375 \r\nQ 38.875 34.625 31.78125 34.625 \r\nz\r\nM 21.921875 38.8125 \r\nQ 15.578125 40.375 12.03125 44.71875 \r\nQ 8.5 49.078125 8.5 55.328125 \r\nQ 8.5 64.0625 14.71875 69.140625 \r\nQ 20.953125 74.21875 31.78125 74.21875 \r\nQ 42.671875 74.21875 48.875 69.140625 \r\nQ 55.078125 64.0625 55.078125 55.328125 \r\nQ 55.078125 49.078125 51.53125 44.71875 \r\nQ 48 40.375 41.703125 38.8125 \r\nQ 48.828125 37.15625 52.796875 32.3125 \r\nQ 56.78125 27.484375 56.78125 20.515625 \r\nQ 56.78125 9.90625 50.3125 4.234375 \r\nQ 43.84375 -1.421875 31.78125 -1.421875 \r\nQ 19.734375 -1.421875 13.25 4.234375 \r\nQ 6.78125 9.90625 6.78125 20.515625 \r\nQ 6.78125 27.484375 10.78125 32.3125 \r\nQ 14.796875 37.15625 21.921875 38.8125 \r\nz\r\nM 18.3125 54.390625 \r\nQ 18.3125 48.734375 21.84375 45.5625 \r\nQ 25.390625 42.390625 31.78125 42.390625 \r\nQ 38.140625 42.390625 41.71875 45.5625 \r\nQ 45.3125 48.734375 45.3125 54.390625 \r\nQ 45.3125 60.0625 41.71875 63.234375 \r\nQ 38.140625 66.40625 31.78125 66.40625 \r\nQ 25.390625 66.40625 21.84375 63.234375 \r\nQ 18.3125 60.0625 18.3125 54.390625 \r\nz\r\n\" id=\"DejaVuSans-56\"/>\r\n      </defs>\r\n      <g transform=\"translate(13.5625 119.719219)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-56\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_5\">\r\n     <g id=\"line2d_14\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m5928dede77\" y=\"85.969587\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_13\">\r\n      <!-- 100 -->\r\n      <g transform=\"translate(7.2 89.768806)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_6\">\r\n     <g id=\"line2d_15\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m5928dede77\" y=\"56.019174\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_14\">\r\n      <!-- 120 -->\r\n      <g transform=\"translate(7.2 59.818392)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_7\">\r\n     <g id=\"line2d_16\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m5928dede77\" y=\"26.06876\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_15\">\r\n      <!-- 140 -->\r\n      <g transform=\"translate(7.2 29.867979)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n   </g>\r\n   <g id=\"line2d_17\">\r\n    <path clip-path=\"url(#p7754f8b0af)\" d=\"M 33.2875 211.761322 \r\nL 36.100945 192.293554 \r\nL 38.914391 33.556364 \r\nL 41.727836 184.80595 \r\nL 44.541282 213.258843 \r\nL 47.354727 211.761322 \r\nL 50.168172 192.293554 \r\nL 52.981618 33.556364 \r\nL 55.795063 187.800992 \r\nL 58.608508 211.761322 \r\nL 61.421954 213.258843 \r\nL 64.235399 190.796033 \r\nL 67.048845 33.556364 \r\nL 69.86229 184.80595 \r\nL 72.675735 213.258843 \r\nL 75.489181 211.761322 \r\nL 78.302626 190.796033 \r\nL 81.116071 23.073719 \r\nL 83.929517 184.80595 \r\nL 86.742962 213.258843 \r\nL 89.556408 211.761322 \r\nL 92.369853 192.293554 \r\nL 95.183298 20.078678 \r\nL 97.996744 186.303471 \r\nL 100.810189 211.761322 \r\nL 103.623634 213.258843 \r\nL 106.43708 190.796033 \r\nL 109.250525 24.57124 \r\nL 112.063971 184.80595 \r\nL 114.877416 211.761322 \r\nL 117.690861 213.258843 \r\nL 120.504307 190.796033 \r\nL 123.317752 18.581157 \r\nL 126.131197 184.80595 \r\nL 128.944643 213.258843 \r\nL 131.758088 211.761322 \r\nL 134.571534 192.293554 \r\nL 137.384979 33.556364 \r\nL 140.198424 186.303471 \r\nL 143.01187 213.258843 \r\nL 145.825315 213.258843 \r\nL 148.638761 190.796033 \r\nL 151.452206 17.083636 \r\nL 154.265651 184.80595 \r\nL 157.079097 213.258843 \r\nL 159.892542 211.761322 \r\nL 162.705987 192.293554 \r\nL 165.519433 65.004298 \r\nL 168.332878 186.303471 \r\nL 171.146324 211.761322 \r\nL 173.959769 214.756364 \r\nL 176.773214 190.796033 \r\nL 179.58666 36.551405 \r\nL 182.400105 184.80595 \r\nL 185.21355 213.258843 \r\nL 188.026996 213.258843 \r\nL 190.840441 192.293554 \r\nL 193.653887 18.581157 \r\nL 196.467332 184.80595 \r\nL 199.280777 213.258843 \r\nL 202.094223 211.761322 \r\nL 204.907668 193.791074 \r\nL 207.721113 24.57124 \r\nL 210.534559 183.30843 \r\nL 213.348004 213.258843 \r\nL 216.16145 213.258843 \r\nL 218.974895 192.293554 \r\nL 221.78834 30.561322 \r\nL 224.601786 183.30843 \r\nL 227.415231 213.258843 \r\nL 230.228676 213.258843 \r\nL 233.042122 190.796033 \r\nL 235.855567 17.083636 \r\nL 238.669013 186.303471 \r\nL 241.482458 213.258843 \r\nL 244.295903 211.761322 \r\nL 247.109349 190.796033 \r\nL 249.922794 26.06876 \r\nL 252.73624 186.303471 \r\nL 255.549685 213.258843 \r\nL 258.36313 211.761322 \r\nL 261.176576 192.293554 \r\nL 263.990021 39.546446 \r\nL 266.803466 184.80595 \r\nL 269.616912 213.258843 \r\nL 272.430357 211.761322 \r\nL 275.243803 193.791074 \r\nL 278.057248 20.078678 \r\nL 280.870693 187.800992 \r\nL 283.684139 213.258843 \r\nL 286.497584 211.761322 \r\nL 289.311029 192.293554 \r\nL 292.124475 30.561322 \r\nL 294.93792 184.80595 \r\nL 297.751366 211.761322 \r\nL 300.564811 213.258843 \r\nL 303.378256 190.796033 \r\nL 306.191702 67.999339 \r\nL 309.005147 189.298512 \r\nL 311.818592 211.761322 \r\nL 314.632038 213.258843 \r\nL 317.445483 193.791074 \r\nL 320.258929 69.49686 \r\nL 323.072374 187.800992 \r\nL 325.885819 213.258843 \r\nL 328.699265 213.258843 \r\nL 331.51271 190.796033 \r\nL 334.326155 84.472066 \r\nL 337.139601 184.80595 \r\nL 339.953046 213.258843 \r\nL 342.766492 213.258843 \r\nL 345.579937 193.791074 \r\nL 348.393382 67.999339 \r\nL 351.206828 189.298512 \r\nL 354.020273 213.258843 \r\nL 356.833718 213.258843 \r\nL 359.647164 195.288595 \r\nL 362.460609 41.043967 \r\nL 365.274055 184.80595 \r\nL 368.0875 213.258843 \r\n\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\r\n   </g>\r\n   <g id=\"patch_3\">\r\n    <path d=\"M 33.2875 224.64 \r\nL 33.2875 7.2 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_4\">\r\n    <path d=\"M 368.0875 224.64 \r\nL 368.0875 7.2 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_5\">\r\n    <path d=\"M 33.2875 224.64 \r\nL 368.0875 224.64 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_6\">\r\n    <path d=\"M 33.2875 7.2 \r\nL 368.0875 7.2 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n  </g>\r\n </g>\r\n <defs>\r\n  <clipPath id=\"p7754f8b0af\">\r\n   <rect height=\"217.44\" width=\"334.8\" x=\"33.2875\" y=\"7.2\"/>\r\n  </clipPath>\r\n </defs>\r\n</svg>\r\n","text/plain":"<Figure size 432x288 with 1 Axes>"},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":"grouped_data = data.groupby(pandas.Grouper(freq='2Min')).agg({'count'})\ngrouped_data.plot(legend=False)"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["Looking good!  We can also see here how easy it is within a Jupyter Notebook to embed visualizations.  Whereas in the past you might have needed to output a plot to a file, now you can simply generate it inline and trivially regenerate to observe as your data changes."]},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["## Modeling the Data ##\n","\n","Now that we have a reasonably clean dataset to work off of, we can try to apply forecasting techniques to give ourselves a window into future behavior.  We're going to utilize an ARIMA model for this task.  Without going too far into the weeds, this is an algorithm that uses historical data in an attempt to determine and utilize the underlying periodicity/seasonality coupled with underlying moving averages for prediction.  For those familiar with simpler regression-based approaches (e.g. linear, polynomial), ARIMA can often better capture higher order behavior by leveraging seasonal look-backs, making it a very convenient and useful tool for the sort of data patterns we often see in service infrastructure.\n","\n","Since there is often a lot of legwork in determining the proper parameters to an ARIMA model outside the scope of this post, we're going to take the easy way out and utilize an auto-arima package that will attempt to determine the optimal structure of this model for us.  This can often be sufficient for well-structured and regular data."]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[{"data":{"image/png":"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\n","image/svg+xml":"<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\n<svg height=\"248.518125pt\" version=\"1.1\" viewBox=\"0 0 375.2875 248.518125\" width=\"375.2875pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <defs>\r\n  <style type=\"text/css\">\r\n*{stroke-linecap:butt;stroke-linejoin:round;}\r\n  </style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n  <g id=\"patch_1\">\r\n   <path d=\"M 0 248.518125 \r\nL 375.2875 248.518125 \r\nL 375.2875 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n  </g>\r\n  <g id=\"axes_1\">\r\n   <g id=\"patch_2\">\r\n    <path d=\"M 33.2875 224.64 \r\nL 368.0875 224.64 \r\nL 368.0875 7.2 \r\nL 33.2875 7.2 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n   </g>\r\n   <g id=\"matplotlib.axis_1\">\r\n    <g id=\"xtick_1\">\r\n     <g id=\"line2d_1\">\r\n      <defs>\r\n       <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"m2afa3da38b\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n      </defs>\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"48.505682\" xlink:href=\"#m2afa3da38b\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_1\">\r\n      <!-- 0 -->\r\n      <defs>\r\n       <path d=\"M 31.78125 66.40625 \r\nQ 24.171875 66.40625 20.328125 58.90625 \r\nQ 16.5 51.421875 16.5 36.375 \r\nQ 16.5 21.390625 20.328125 13.890625 \r\nQ 24.171875 6.390625 31.78125 6.390625 \r\nQ 39.453125 6.390625 43.28125 13.890625 \r\nQ 47.125 21.390625 47.125 36.375 \r\nQ 47.125 51.421875 43.28125 58.90625 \r\nQ 39.453125 66.40625 31.78125 66.40625 \r\nz\r\nM 31.78125 74.21875 \r\nQ 44.046875 74.21875 50.515625 64.515625 \r\nQ 56.984375 54.828125 56.984375 36.375 \r\nQ 56.984375 17.96875 50.515625 8.265625 \r\nQ 44.046875 -1.421875 31.78125 -1.421875 \r\nQ 19.53125 -1.421875 13.0625 8.265625 \r\nQ 6.59375 17.96875 6.59375 36.375 \r\nQ 6.59375 54.828125 13.0625 64.515625 \r\nQ 19.53125 74.21875 31.78125 74.21875 \r\nz\r\n\" id=\"DejaVuSans-48\"/>\r\n      </defs>\r\n      <g transform=\"translate(45.324432 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_2\">\r\n     <g id=\"line2d_2\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"99.659234\" xlink:href=\"#m2afa3da38b\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_2\">\r\n      <!-- 20 -->\r\n      <defs>\r\n       <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.21875 28.421875 74.21875 \r\nQ 39.75 74.21875 46.484375 68.546875 \r\nQ 53.21875 62.890625 53.21875 53.421875 \r\nQ 53.21875 48.921875 51.53125 44.890625 \r\nQ 49.859375 40.875 45.40625 35.40625 \r\nQ 44.1875 33.984375 37.640625 27.21875 \r\nQ 31.109375 20.453125 19.1875 8.296875 \r\nz\r\n\" id=\"DejaVuSans-50\"/>\r\n      </defs>\r\n      <g transform=\"translate(93.296734 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_3\">\r\n     <g id=\"line2d_3\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"150.812786\" xlink:href=\"#m2afa3da38b\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_3\">\r\n      <!-- 40 -->\r\n      <defs>\r\n       <path d=\"M 37.796875 64.3125 \r\nL 12.890625 25.390625 \r\nL 37.796875 25.390625 \r\nz\r\nM 35.203125 72.90625 \r\nL 47.609375 72.90625 \r\nL 47.609375 25.390625 \r\nL 58.015625 25.390625 \r\nL 58.015625 17.1875 \r\nL 47.609375 17.1875 \r\nL 47.609375 0 \r\nL 37.796875 0 \r\nL 37.796875 17.1875 \r\nL 4.890625 17.1875 \r\nL 4.890625 26.703125 \r\nz\r\n\" id=\"DejaVuSans-52\"/>\r\n      </defs>\r\n      <g transform=\"translate(144.450286 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_4\">\r\n     <g id=\"line2d_4\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"201.966339\" xlink:href=\"#m2afa3da38b\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_4\">\r\n      <!-- 60 -->\r\n      <defs>\r\n       <path d=\"M 33.015625 40.375 \r\nQ 26.375 40.375 22.484375 35.828125 \r\nQ 18.609375 31.296875 18.609375 23.390625 \r\nQ 18.609375 15.53125 22.484375 10.953125 \r\nQ 26.375 6.390625 33.015625 6.390625 \r\nQ 39.65625 6.390625 43.53125 10.953125 \r\nQ 47.40625 15.53125 47.40625 23.390625 \r\nQ 47.40625 31.296875 43.53125 35.828125 \r\nQ 39.65625 40.375 33.015625 40.375 \r\nz\r\nM 52.59375 71.296875 \r\nL 52.59375 62.3125 \r\nQ 48.875 64.0625 45.09375 64.984375 \r\nQ 41.3125 65.921875 37.59375 65.921875 \r\nQ 27.828125 65.921875 22.671875 59.328125 \r\nQ 17.53125 52.734375 16.796875 39.40625 \r\nQ 19.671875 43.65625 24.015625 45.921875 \r\nQ 28.375 48.1875 33.59375 48.1875 \r\nQ 44.578125 48.1875 50.953125 41.515625 \r\nQ 57.328125 34.859375 57.328125 23.390625 \r\nQ 57.328125 12.15625 50.6875 5.359375 \r\nQ 44.046875 -1.421875 33.015625 -1.421875 \r\nQ 20.359375 -1.421875 13.671875 8.265625 \r\nQ 6.984375 17.96875 6.984375 36.375 \r\nQ 6.984375 53.65625 15.1875 63.9375 \r\nQ 23.390625 74.21875 37.203125 74.21875 \r\nQ 40.921875 74.21875 44.703125 73.484375 \r\nQ 48.484375 72.75 52.59375 71.296875 \r\nz\r\n\" id=\"DejaVuSans-54\"/>\r\n      </defs>\r\n      <g transform=\"translate(195.603839 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-54\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_5\">\r\n     <g id=\"line2d_5\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"253.119891\" xlink:href=\"#m2afa3da38b\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_5\">\r\n      <!-- 80 -->\r\n      <defs>\r\n       <path d=\"M 31.78125 34.625 \r\nQ 24.75 34.625 20.71875 30.859375 \r\nQ 16.703125 27.09375 16.703125 20.515625 \r\nQ 16.703125 13.921875 20.71875 10.15625 \r\nQ 24.75 6.390625 31.78125 6.390625 \r\nQ 38.8125 6.390625 42.859375 10.171875 \r\nQ 46.921875 13.96875 46.921875 20.515625 \r\nQ 46.921875 27.09375 42.890625 30.859375 \r\nQ 38.875 34.625 31.78125 34.625 \r\nz\r\nM 21.921875 38.8125 \r\nQ 15.578125 40.375 12.03125 44.71875 \r\nQ 8.5 49.078125 8.5 55.328125 \r\nQ 8.5 64.0625 14.71875 69.140625 \r\nQ 20.953125 74.21875 31.78125 74.21875 \r\nQ 42.671875 74.21875 48.875 69.140625 \r\nQ 55.078125 64.0625 55.078125 55.328125 \r\nQ 55.078125 49.078125 51.53125 44.71875 \r\nQ 48 40.375 41.703125 38.8125 \r\nQ 48.828125 37.15625 52.796875 32.3125 \r\nQ 56.78125 27.484375 56.78125 20.515625 \r\nQ 56.78125 9.90625 50.3125 4.234375 \r\nQ 43.84375 -1.421875 31.78125 -1.421875 \r\nQ 19.734375 -1.421875 13.25 4.234375 \r\nQ 6.78125 9.90625 6.78125 20.515625 \r\nQ 6.78125 27.484375 10.78125 32.3125 \r\nQ 14.796875 37.15625 21.921875 38.8125 \r\nz\r\nM 18.3125 54.390625 \r\nQ 18.3125 48.734375 21.84375 45.5625 \r\nQ 25.390625 42.390625 31.78125 42.390625 \r\nQ 38.140625 42.390625 41.71875 45.5625 \r\nQ 45.3125 48.734375 45.3125 54.390625 \r\nQ 45.3125 60.0625 41.71875 63.234375 \r\nQ 38.140625 66.40625 31.78125 66.40625 \r\nQ 25.390625 66.40625 21.84375 63.234375 \r\nQ 18.3125 60.0625 18.3125 54.390625 \r\nz\r\n\" id=\"DejaVuSans-56\"/>\r\n      </defs>\r\n      <g transform=\"translate(246.757391 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-56\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_6\">\r\n     <g id=\"line2d_6\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"304.273443\" xlink:href=\"#m2afa3da38b\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_6\">\r\n      <!-- 100 -->\r\n      <defs>\r\n       <path d=\"M 12.40625 8.296875 \r\nL 28.515625 8.296875 \r\nL 28.515625 63.921875 \r\nL 10.984375 60.40625 \r\nL 10.984375 69.390625 \r\nL 28.421875 72.90625 \r\nL 38.28125 72.90625 \r\nL 38.28125 8.296875 \r\nL 54.390625 8.296875 \r\nL 54.390625 0 \r\nL 12.40625 0 \r\nz\r\n\" id=\"DejaVuSans-49\"/>\r\n      </defs>\r\n      <g transform=\"translate(294.729693 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_7\">\r\n     <g id=\"line2d_7\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"355.426996\" xlink:href=\"#m2afa3da38b\" y=\"224.64\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_7\">\r\n      <!-- 120 -->\r\n      <g transform=\"translate(345.883246 239.238437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n   </g>\r\n   <g id=\"matplotlib.axis_2\">\r\n    <g id=\"ytick_1\">\r\n     <g id=\"line2d_8\">\r\n      <defs>\r\n       <path d=\"M 0 0 \r\nL -3.5 0 \r\n\" id=\"m2f3ccca163\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n      </defs>\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m2f3ccca163\" y=\"205.77124\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_8\">\r\n      <!-- 20 -->\r\n      <g transform=\"translate(13.5625 209.570458)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_2\">\r\n     <g id=\"line2d_9\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m2f3ccca163\" y=\"175.820826\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_9\">\r\n      <!-- 40 -->\r\n      <g transform=\"translate(13.5625 179.620045)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_3\">\r\n     <g id=\"line2d_10\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m2f3ccca163\" y=\"145.870413\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_10\">\r\n      <!-- 60 -->\r\n      <g transform=\"translate(13.5625 149.669632)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-54\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_4\">\r\n     <g id=\"line2d_11\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m2f3ccca163\" y=\"115.92\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_11\">\r\n      <!-- 80 -->\r\n      <g transform=\"translate(13.5625 119.719219)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-56\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_5\">\r\n     <g id=\"line2d_12\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m2f3ccca163\" y=\"85.969587\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_12\">\r\n      <!-- 100 -->\r\n      <g transform=\"translate(7.2 89.768806)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_6\">\r\n     <g id=\"line2d_13\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m2f3ccca163\" y=\"56.019174\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_13\">\r\n      <!-- 120 -->\r\n      <g transform=\"translate(7.2 59.818392)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_7\">\r\n     <g id=\"line2d_14\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#m2f3ccca163\" y=\"26.06876\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_14\">\r\n      <!-- 140 -->\r\n      <g transform=\"translate(7.2 29.867979)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n   </g>\r\n   <g id=\"line2d_15\">\r\n    <path clip-path=\"url(#pd040ce21e6)\" d=\"M 48.505682 211.761322 \r\nL 51.063359 192.293554 \r\nL 53.621037 33.556364 \r\nL 56.178715 184.80595 \r\nL 58.736392 213.258843 \r\nL 61.29407 211.761322 \r\nL 63.851748 192.293554 \r\nL 66.409425 33.556364 \r\nL 68.967103 187.800992 \r\nL 71.52478 211.761322 \r\nL 74.082458 213.258843 \r\nL 76.640136 190.796033 \r\nL 79.197813 33.556364 \r\nL 81.755491 184.80595 \r\nL 84.313168 213.258843 \r\nL 86.870846 211.761322 \r\nL 89.428524 190.796033 \r\nL 91.986201 23.073719 \r\nL 94.543879 184.80595 \r\nL 97.101557 213.258843 \r\nL 99.659234 211.761322 \r\nL 102.216912 192.293554 \r\nL 104.774589 20.078678 \r\nL 107.332267 186.303471 \r\nL 109.889945 211.761322 \r\nL 112.447622 213.258843 \r\nL 115.0053 190.796033 \r\nL 117.562977 24.57124 \r\nL 120.120655 184.80595 \r\nL 122.678333 211.761322 \r\nL 125.23601 213.258843 \r\nL 127.793688 190.796033 \r\nL 130.351366 18.581157 \r\nL 132.909043 184.80595 \r\nL 135.466721 213.258843 \r\nL 138.024398 211.761322 \r\nL 140.582076 192.293554 \r\nL 143.139754 33.556364 \r\nL 145.697431 186.303471 \r\nL 148.255109 213.258843 \r\nL 150.812786 213.258843 \r\nL 153.370464 190.796033 \r\nL 155.928142 17.083636 \r\nL 158.485819 184.80595 \r\nL 161.043497 213.258843 \r\nL 163.601175 211.761322 \r\nL 166.158852 192.293554 \r\nL 168.71653 65.004298 \r\nL 171.274207 186.303471 \r\nL 173.831885 211.761322 \r\nL 176.389563 214.756364 \r\nL 178.94724 190.796033 \r\nL 181.504918 36.551405 \r\nL 184.062595 184.80595 \r\nL 186.620273 213.258843 \r\nL 189.177951 213.258843 \r\nL 191.735628 192.293554 \r\nL 194.293306 18.581157 \r\nL 196.850984 184.80595 \r\nL 199.408661 213.258843 \r\nL 201.966339 211.761322 \r\nL 204.524016 193.791074 \r\nL 207.081694 24.57124 \r\nL 209.639372 183.30843 \r\nL 212.197049 213.258843 \r\nL 214.754727 213.258843 \r\nL 217.312405 192.293554 \r\nL 219.870082 30.561322 \r\nL 222.42776 183.30843 \r\nL 224.985437 213.258843 \r\nL 227.543115 213.258843 \r\nL 230.100793 190.796033 \r\nL 232.65847 17.083636 \r\nL 235.216148 186.303471 \r\nL 237.773825 213.258843 \r\nL 240.331503 211.761322 \r\nL 242.889181 190.796033 \r\nL 245.446858 26.06876 \r\nL 248.004536 186.303471 \r\nL 250.562214 213.258843 \r\nL 253.119891 211.761322 \r\nL 255.677569 192.293554 \r\nL 258.235246 39.546446 \r\nL 260.792924 184.80595 \r\nL 263.350602 213.258843 \r\nL 265.908279 211.761322 \r\nL 268.465957 193.791074 \r\nL 271.023634 20.078678 \r\nL 273.581312 187.800992 \r\nL 276.13899 213.258843 \r\n\" style=\"fill:none;stroke:#0000ff;stroke-linecap:square;stroke-width:1.5;\"/>\r\n   </g>\r\n   <g id=\"line2d_16\">\r\n    <path clip-path=\"url(#pd040ce21e6)\" d=\"M 278.696667 212.910422 \r\nL 281.254345 193.694178 \r\nL 283.812023 21.864017 \r\nL 286.3697 187.578761 \r\nL 288.927378 213.713425 \r\nL 291.485055 213.461422 \r\nL 294.042733 193.076344 \r\nL 296.600411 23.212484 \r\nL 299.158088 187.038644 \r\nL 301.715766 213.908049 \r\nL 304.273443 213.802688 \r\nL 306.831121 192.314909 \r\nL 309.388799 24.420253 \r\nL 311.946476 186.412369 \r\nL 314.504154 214.024463 \r\nL 317.061832 214.076787 \r\nL 319.619509 191.521235 \r\nL 322.177187 25.575052 \r\nL 324.734864 185.768313 \r\nL 327.292542 214.116399 \r\nL 329.85022 214.325957 \r\nL 332.407897 190.728064 \r\nL 334.965575 26.702989 \r\nL 337.523252 185.126571 \r\nL 340.08093 214.19975 \r\nL 342.638608 214.562783 \r\nL 345.196285 189.944906 \r\nL 347.753963 27.81196 \r\nL 350.311641 184.492967 \r\nL 352.869318 214.279223 \r\n\" style=\"fill:none;stroke:#008000;stroke-linecap:square;stroke-width:1.5;\"/>\r\n   </g>\r\n   <g id=\"patch_3\">\r\n    <path d=\"M 33.2875 224.64 \r\nL 33.2875 7.2 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_4\">\r\n    <path d=\"M 368.0875 224.64 \r\nL 368.0875 7.2 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_5\">\r\n    <path d=\"M 33.2875 224.64 \r\nL 368.0875 224.64 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_6\">\r\n    <path d=\"M 33.2875 7.2 \r\nL 368.0875 7.2 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n  </g>\r\n </g>\r\n <defs>\r\n  <clipPath id=\"pd040ce21e6\">\r\n   <rect height=\"217.44\" width=\"334.8\" x=\"33.2875\" y=\"7.2\"/>\r\n  </clipPath>\r\n </defs>\r\n</svg>\r\n","text/plain":"<Figure size 432x288 with 1 Axes>"},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":"from pmdarima import auto_arima\nfrom pmdarima.model_selection import train_test_split\nfrom matplotlib import pyplot\nimport numpy\n\n# Training a model is _VERY EASY_, although it should be noted that one can tune these functions if a different train/test split, or arima parameters, is desired.\ntrain, test = train_test_split(grouped_data)\nmodel = auto_arima(train, suppress_warnings=True)\n\n# Let's visualize our results to get a sense for how well our prediction is working.\nforecast = model.predict(test.shape[0])\nx = numpy.arange(grouped_data.shape[0])\npyplot.plot(x[:len(train)], train, c='blue')\npyplot.plot(x[len(train):], forecast, c='green')\n# pyplot.plot(x[len(train):], test, c='orange') # If it's desired to compare vs. actual results, uncomment this.\npyplot.show()"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["We see that the forecast captures the primary data trend rather nicely.  We can add the left-out test data to the chart above by uncommenting the remaining pyplot stanza and rerunning to get an idea of how well it has been fit, and observe that the delta is acceptably small.\n","\n","** As a pragmatic note: **  It can often be wise to not include all historical data when training your model; this may result in overfitting if the behavior of the data changes subtlely.  Finding a balance between \"enough data to capture the trend\" and \"not enough to overfit\" is an important question to ask, and should be re-evaluated over time as the underlying data changes.  A notebook (such as this one!) can help for easily evaluating that manually, and can give inspiration for how this process could be automated, potentially using blob storage as well for persistance of model metadata."]},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["## Using Azure Storage to iterate and automate ##\n","\n","Once we have a promising model, the next step is to ensure it does not regress, and to tune parameters.  A common pattern for this is to store the hyperparameters and model outcomes in a persisted data store to track performance over time.\n","\n","If the user provided it earlier, we'll reuse the existing storage account we extracted telemetry data from, but for the purposes of demonstrating resource creation, and to decouple the earlier logic for readers following along without an AppInsights setup, we'll also assume nothing exists at this point other than the authenticated azure credentials from earlier.\n","\n","Let's begin by capturing some metrics to denote our models current state."]},{"cell_type":"code","execution_count":6,"metadata":{},"outputs":[],"source":"from sklearn.metrics import mean_squared_error\n\n# Root mean squared error, a common method for observing the delta between a forecast and the source-of-truth.\nrmse = numpy.sqrt(mean_squared_error(test, forecast))\n# Akaike's information criterion, a measure that also folds the \"simplicity\" of the model into the score.\naic = model.aic()\n# We should also record what data we were \"up to\" when we made this forecast.\nforecast_time = test.index[-1]\n# And finally let's get the parameters of the model\nparams = model.params()"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["We now need to put these values somewhere to persist them for the future.  We'll leverage the Azure Storage Management SDK this time, creating a blob to store this data, demonstrating how to use the azure-mgmt-storage SDK in the process.  It should be mentioned that any sort of structured datastore would be sufficient, (tables, sql, nosql, etc.) we chose blob primarily to avoid introducing more new concepts at this point in the post.\n","\n","Let's create a new storage account to start, using the azure-mgmt-storage SDK and our existing credentials.  This section requires the subscription_id and the resource group the storage account should live within, as well as the credentials you provided prior."]},{"cell_type":"code","execution_count":7,"metadata":{},"outputs":[],"source":"# Management operations use a different set of credentials than data-plane operations.  This will be unified in the near-future.\nfrom azure.common.credentials import ServicePrincipalCredentials\nmanagement_credential = ServicePrincipalCredentials(client_id, client_secret, tenant=tenant_id)\n\nfrom azure.mgmt.storage import StorageManagementClient\nfrom azure.mgmt.storage.models import StorageAccountCreateParameters, Sku, SkuName, Kind, Reason\nmanagement_client = StorageManagementClient(management_credential, subscription_id)\n# In case a user is picking up from where we left off, let's leverage that storage account.\nstorage_account_name = input_storage_account_name or output_storage_account_name\navailability = management_client.storage_accounts.check_name_availability(storage_account_name)\nif availability.name_available: \n    management_client.storage_accounts.create(\n        output_resource_group, \n        storage_account_name, \n        StorageAccountCreateParameters(\n            sku=Sku(name=SkuName.standard_lrs),\n            kind=Kind.storage,\n            location='westus2'\n        ))\nelse:\n    print(\"Warning: Storage account already exists\")"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["Our new storage account now exists (or we're leveraging one from earlier), so let's create a container within it to store our data, and then emplace it there."]},{"cell_type":"code","execution_count":8,"metadata":{},"outputs":[],"source":"# Technically we don't need to recreate this, but not assuming readers ran the prior step if they skipped Azure egress.\nfrom azure.storage.blob import BlobServiceClient\nfrom azure.core.exceptions import ResourceExistsError\noauth_url = \"https://{}.blob.core.windows.net\".format(\n        storage_account_name\n    )\nservice_client = BlobServiceClient(account_url = oauth_url, credential=credential)\n\n# Now create the actual container\ntry:\n    service_client.create_container(output_container_name)\nexcept ResourceExistsError:\n    print(\"Warning: Container already exists\")\n\n# And populate our data within a blob.\nimport json\nblob_client = service_client.get_blob_client(output_container_name, str(forecast_time))\ntry:\n    blob_client.upload_blob(json.dumps({'rmse':rmse, 'aic':aic, 'forecast_time':str(forecast_time), 'params':list(params)}))\nexcept ResourceExistsError:\n    print(\"Warning: Blob already exists\")"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["We can then take steps similar to fetching the initial log data above, to pull down the model logs for inspection; for instance to watch for or understand a regression in model performance."]},{"cell_type":"code","execution_count":9,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":"{'rmse': 11.92085713990942, 'aic': 575.4807808475052, 'forecast_time': '2020-04-23 15:58:00', 'params': [50.01749991611674, -0.2116558444514789, -0.21623675018538668, -0.21730199448346543, -0.2105081029632333, 0.7779167602580747, 0.06072415074177533, 22.84579391089592]}\n"}],"source":"container = service_client.get_container_client(output_container_name)\n    blob_list = container.list_blobs()\n    for blob in blob_list:\n        body = json.loads(container.download_blob(blob.name).readall().decode('utf8'))\n        print(body)"},{"cell_type":"markdown","execution_count":null,"metadata":{},"outputs":[],"source":["## Conclusion ##\n","\n","We've demonstrated through this writeup how to consume semi-structured log data, transform it into a useful form, perform analytics, and publish those results for further use.  While this was a rather self-contained and tightly scoped example, this pattern (and technique) is quite close to the structure of commonly used systems for understanding and acting on timeseries data.\n","\n","We hope to have also shown the utility of Jupyter Notebooks for interactive data exploration and communication, coupled with the capabilities of Azure Storage for data storage and persistance.\n","\n","With these tools we hope to leave you well equipped for your own data journey."]}],"nbformat":4,"nbformat_minor":2,"metadata":{"language_info":{"name":"python","codemirror_mode":{"name":"ipython","version":3}},"orig_nbformat":2,"file_extension":".py","mimetype":"text/x-python","name":"python","npconvert_exporter":"python","pygments_lexer":"ipython3","version":3}}